/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controller;

import java.io.IOException;
import java.io.OutputStream;
import java.net.URL;
import java.sql.Connection;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.mail.Session;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import model.ConnectionFactory;
import model.beans.Cliente;
import model.beans.Consulta;
import model.beans.Criptografia;
import model.beans.Evento;
import model.beans.Horario;
import model.beans.TipoConsulta;
import model.beans.Usuario;
import model.dao.ConsultaDAO;
import model.dao.UsuarioDAO;
import model.negocio.ClienteNegocio;
import model.negocio.ConsultaNegocio;
import model.negocio.EventoNegocio;
import model.negocio.HorarioNegocio;
import model.negocio.TipoConsultaNegocio;
import model.negocio.UsuarioNegocio;
import net.sf.jasperreports.engine.JasperRunManager;

/**
 *
 * @author Carol
 */
@WebServlet(name = "Controladora", urlPatterns = {"/Controladora"})
public class Controladora extends HttpServlet {

    /**
     * Processes requests for both HTTP
     * <code>GET</code> and
     * <code>POST</code> methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException, Exception {
        String action = request.getParameter("action");
        
        //Cadastro do Cliente
        if(action.equals("CadastraCliente")){
            String id = request.getParameter("idCliente");
            String nome = request.getParameter("nome");
            String endereco = request.getParameter("endereco");
            String email = request.getParameter("email");
            String cpf = request.getParameter("cpf");
            String data = request.getParameter("dataNasc");
            String sexo = request.getParameter("sexo");
            String telefone = request.getParameter("telefone");
            String celular = request.getParameter("celular");
            DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");  
            Date dataNasc = (Date)formatter.parse(data); 
            
            ClienteNegocio negocio = new ClienteNegocio();
            Cliente cliente = new Cliente(nome, email, telefone, celular, dataNasc, cpf, sexo, endereco);
            
            if(id.equals("")){
                List<Object> listaValida = negocio.ValidaDados(cliente);
                boolean valida = (Boolean)listaValida.get(0);
                if(!valida){
                    request.setAttribute("msg", listaValida.get(1));
                    RequestDispatcher rd = getServletContext().getRequestDispatcher("/cadastro_cliente.jsp");
                    rd.forward(request, response);
                    //out.println("<script type='text/javascript'> alert('" + listaValida.get(1) + "');window.history.back();</script>");
                }else{     
                    try{
                        negocio.Salvar(cliente);
                        request.setAttribute("msg", "Cliente inserido com sucesso!");
                        RequestDispatcher rd = getServletContext().getRequestDispatcher("/cadastro_cliente.jsp");
                        rd.forward(request, response);
                        //out.println("<script type='text/javascript'> alert('Cliente inserido com sucesso');window.location.replace('cadastro_cliente.jsp');</script>");
                    }catch(Exception ex){
                        request.setAttribute("msg", "Ocorreu algum erro no sistema, se o erro persistir entre em contato com o administrador!");                    
                        RequestDispatcher rd = getServletContext().getRequestDispatcher("/cadastro_cliente.jsp");
                        rd.forward(request, response);
                    }
                }
            }else{
                try{
                    int id2 = Integer.parseInt(id);
                    cliente.setId(id2);
                    negocio.alterar(cliente);
                    request.setAttribute("msg", "Cliente alterado com sucesso!");
                    RequestDispatcher rd = getServletContext().getRequestDispatcher("/cadastro_cliente.jsp");
                    rd.forward(request, response);
                }catch(Exception ex){
                    request.setAttribute("msg", "Ocorreu algum erro no sistema, se o erro persistir entre em contato com o administrador!");                    
                    RequestDispatcher rd = getServletContext().getRequestDispatcher("/cadastro_cliente.jsp");
                    rd.forward(request, response);
                }
            }
        }
        
        //Deletar Cliente
        if(action.equals("DeletarCliente")){
            String idStr = request.getParameter("idDel");
            int id = Integer.parseInt(idStr);
            ClienteNegocio negocio = new ClienteNegocio();
            
            if(negocio.consulta(id)){
                negocio.deletar(id);
                request.setAttribute("msg", "Cliente excluido com sucesso!");
                RequestDispatcher rd = getServletContext().getRequestDispatcher("/consultar_cliente.jsp");
                rd.forward(request, response);
            }else{
                request.setAttribute("msg", "Impossível deletar o cliente pois existe consulta marcada para o mesmo. Exclua as consultas antes de excluir o cliente!");
                RequestDispatcher rd = getServletContext().getRequestDispatcher("/consultar_cliente.jsp");
                rd.forward(request, response); 
            }
        }
        
        //Alterar Cliente
        if(action.equals("AlterarCliente")){
            int id = Integer.parseInt(request.getParameter("idEdita"));
            ClienteNegocio negocio = new ClienteNegocio();
            Cliente c = negocio.buscaId(id);
            request.setAttribute("cliente", c);
            RequestDispatcher rd = getServletContext().getRequestDispatcher("/cadastro_cliente.jsp");
            rd.forward(request, response);
        }
        
        //Cadastro do Tipo de Consulta
        if(action.equals("CadastraTipoConsulta")){
            TipoConsulta tpcon = new TipoConsulta();
            
            tpcon.setNome(request.getParameter("nome"));
            tpcon.setDuracao(request.getParameter("duracao"));
            String idTc = request.getParameter("idTc");
            
            TipoConsultaNegocio negocio = new TipoConsultaNegocio();
//            List<TipoConsulta> lista = negocio.listar();
//            request.setAttribute("listaTipoConsulta", lista);
            if(idTc.equals("")){
                if(negocio.ValidaDados(tpcon)){
                    negocio.Salvar(tpcon);
                    request.setAttribute("msg", "Tipo de Consulta inserida com sucesso!");
                    List<TipoConsulta> lista = negocio.listar();
                    request.setAttribute("listaTipoConsulta", lista);
                    RequestDispatcher rd = getServletContext().getRequestDispatcher("/tipo_consulta.jsp");
                    rd.forward(request, response);
                }else{
                    request.setAttribute("erro", "Dados Inválidos, Tente Novamente!");
                    RequestDispatcher rd = getServletContext().getRequestDispatcher("/tipo_consulta.jsp");
                    rd.forward(request, response);
                }
            }
            else{
                int idTipo = Integer.parseInt(idTc);
                if(negocio.ValidaDados(tpcon)){
                    tpcon.setIdTpCons(idTipo);
                    negocio.alterar(tpcon);
                    request.setAttribute("msg", "Tipo de Consulta alterada com sucesso!");
                    List<TipoConsulta> lista = negocio.listar();
                    request.setAttribute("listaTipoConsulta", lista);
                    RequestDispatcher rd = getServletContext().getRequestDispatcher("/tipo_consulta.jsp");
                    rd.forward(request, response);
                }else{
                    request.setAttribute("erro", "Dados Inválidos, Tente Novamente!");
                    RequestDispatcher rd = getServletContext().getRequestDispatcher("/tipo_consulta.jsp");
                    rd.forward(request, response);
                }
            }
                    
            
        }
        
        //Cadastro de Evento
        if(action.equals("CadastraEvento")){
            Evento evento = new Evento();
            String id = request.getParameter("idEvento");
            evento.setNome(request.getParameter("nome"));
            evento.setTipo(Integer.parseInt(request.getParameter("tipo")));
            evento.setMensagem(request.getParameter("mensagem"));
            
            String dataE = request.getParameter("data");

            DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");  
            Date dataEv = (Date)formatter.parse(dataE); 
            
            evento.setData(dataEv);
            
            EventoNegocio negocio = new EventoNegocio();
            if(id.equals("")){
                List<Object> listaValida = negocio.ValidaDados(evento);
                boolean valida = (Boolean)listaValida.get(0);
                if(!valida){
                    request.setAttribute("msg", listaValida.get(1));
                    TipoConsultaNegocio negocioTc = new TipoConsultaNegocio();
                    List<TipoConsulta> lista2 = negocioTc.listar();
                    request.setAttribute("listaTpConsulta", lista2);
                    RequestDispatcher rd = getServletContext().getRequestDispatcher("/criar_evento.jsp");
                    rd.forward(request, response);
               }else{     
                    try{
                        if(negocio.enviarEmail(evento)){
                            negocio.Salvar(evento);
                            request.setAttribute("msg", "Evento inserido com sucesso!");
                            TipoConsultaNegocio negocioTc = new TipoConsultaNegocio();
                            List<TipoConsulta> lista2 = negocioTc.listar();
                            request.setAttribute("listaTpConsulta", lista2);
                            RequestDispatcher rd = getServletContext().getRequestDispatcher("/criar_evento.jsp");
                            rd.forward(request, response);
                        }else{
                            request.setAttribute("msg", "Não foram encontrados clientes para este tipo de consulta, sendo assim o evento não foi cadastrado!");
                            TipoConsultaNegocio negocioTc = new TipoConsultaNegocio();
                            List<TipoConsulta> lista2 = negocioTc.listar();
                            request.setAttribute("listaTpConsulta", lista2);
                            RequestDispatcher rd = getServletContext().getRequestDispatcher("/criar_evento.jsp");
                            rd.forward(request, response);
                        }
                    }catch(Exception ex){
                        request.setAttribute("msg", "Dados Inválidos, Tente Novamente!");
                        TipoConsultaNegocio negocioTc = new TipoConsultaNegocio();
                        List<TipoConsulta> lista2 = negocioTc.listar();
                        request.setAttribute("listaTpConsulta", lista2);
                        RequestDispatcher rd = getServletContext().getRequestDispatcher("/criar_evento.jsp");
                        rd.forward(request, response);
                    }
                }
            } else{
                try{
                    int id2 = Integer.parseInt(id);
                    evento.setId(id2);
                    negocio.alterar(evento);
                    negocio.enviarEmail(evento);
                    request.setAttribute("msg", "Evento alterado com sucesso!");
                    TipoConsultaNegocio negocioTc = new TipoConsultaNegocio();
                    List<TipoConsulta> lista2 = negocioTc.listar();
                    request.setAttribute("listaTpConsulta", lista2);
                    RequestDispatcher rd = getServletContext().getRequestDispatcher("/criar_evento.jsp");
                    rd.forward(request, response);
                }catch(Exception ex){
                    request.setAttribute("msg", "Dados Inválidos, Tente Novamente!");
                    TipoConsultaNegocio negocioTc = new TipoConsultaNegocio();
                    List<TipoConsulta> lista2 = negocioTc.listar();
                    request.setAttribute("listaTpConsulta", lista2);
                    RequestDispatcher rd = getServletContext().getRequestDispatcher("/criar_evento.jsp");
                    rd.forward(request, response);
                }
            }
        }
                
        //Consulta Cliente
        if(action.equals("ConsultaCliente")){
            String a = request.getParameter("busca");
            ClienteNegocio negocio = new ClienteNegocio();
            List<Cliente> lista = negocio.buscarCliente(a);
            request.setAttribute("listaClientes", lista);
            RequestDispatcher rd = getServletContext().getRequestDispatcher("/consultar_cliente.jsp");
            rd.forward(request, response);
        }
        
        //Consulta Evento
        if(action.equals("ConsultaEvento")){
            String a = request.getParameter("busca");
            EventoNegocio negocio = new EventoNegocio();
            List<Evento> lista = negocio.buscarEvento(a);
            request.setAttribute("listaEventos", lista);
            RequestDispatcher rd = getServletContext().getRequestDispatcher("/consulta_evento.jsp");
            rd.forward(request, response);         
        }
        
        //Deletar Evento
        if(action.equals("DeletarEvento")){
            EventoNegocio negocio = new EventoNegocio();
            String idDel = request.getParameter("idDel");
            int id = Integer.parseInt(idDel);
            negocio.deletar(id);
            request.setAttribute("msg", "Evento excluido com sucesso!");
            RequestDispatcher rd = getServletContext().getRequestDispatcher("/consulta_evento.jsp");
            rd.forward(request, response);
        }
        
        //Alterar Evento
        if(action.equals("AlteraEvento")){
            int id = Integer.parseInt(request.getParameter("idEdita"));
            EventoNegocio negocio = new EventoNegocio();
            Evento evento = negocio.buscaId(id);
            TipoConsultaNegocio Tpnegocio = new TipoConsultaNegocio();
            List<TipoConsulta> lista = Tpnegocio.listar();
            request.setAttribute("listaTpConsulta", lista);
            request.setAttribute("evento", evento);
            RequestDispatcher rd = getServletContext().getRequestDispatcher("/criar_evento.jsp");
            rd.forward(request, response);
        }
        
        //Altera Tipo Consulta
        if(action.equals("AlteraTpConsulta")){
            TipoConsultaNegocio negocio = new TipoConsultaNegocio();
            String idEdita = request.getParameter("idEdita");
            int id = Integer.parseInt(idEdita);
            TipoConsulta tc = negocio.buscar(id);
            request.setAttribute("tpConsulta", tc);
            List<TipoConsulta> lista = negocio.listar();
            request.setAttribute("listaTipoConsulta", lista);
            RequestDispatcher rd = getServletContext().getRequestDispatcher("/tipo_consulta.jsp");
            rd.forward(request, response);
        }
        
        //Deleta Tipo de Consulta
        if(action.equals("DeletaTpConsulta")){
            TipoConsultaNegocio negocio = new TipoConsultaNegocio();
            String idDel = request.getParameter("idDel");
            int id = Integer.parseInt(idDel);
            
            if(negocio.consulta(id)){
                negocio.deletar(id);
                request.setAttribute("msg", "Tipo de Consulta excluido com sucesso!");
            }else{
                request.setAttribute("msg", "Impossível excluir o tipo de consulta, pois existem consultas marcadas com esse tipo!");
            }
            List<TipoConsulta> lista = negocio.listar();
            request.setAttribute("listaTipoConsulta", lista);
            RequestDispatcher rd = getServletContext().getRequestDispatcher("/tipo_consulta.jsp");
            rd.forward(request, response);
        }
        
        //Consulta Tipo Consulta
        if(action.equals("TipoConsulta")){
            TipoConsultaNegocio negocio = new TipoConsultaNegocio();
            List<TipoConsulta> lista = negocio.listar();
            request.setAttribute("listaTipoConsulta", lista);
            RequestDispatcher rd = getServletContext().getRequestDispatcher("/tipo_consulta.jsp");
            rd.forward(request, response);
        }
        
         //Carrega Combo Tipo Consulta
        if(action.equals("ComboEvento")){
            TipoConsultaNegocio negocio = new TipoConsultaNegocio();
            List<TipoConsulta> lista = negocio.listar();
            request.setAttribute("listaTpConsulta", lista);
            RequestDispatcher rd = getServletContext().getRequestDispatcher("/criar_evento.jsp");
            rd.forward(request, response);
        }
        
        //Pagina Cadatro_usuario.jsp
        if(action.equals("cadastroUsuario")){
            UsuarioDAO usuDAO = new UsuarioDAO();
            List<Usuario> listaUsuario = usuDAO.listar();
            request.setAttribute("listaUsuario", listaUsuario);
            RequestDispatcher rd = getServletContext().getRequestDispatcher("/cadastro_usuario.jsp");
            rd.forward(request, response);
        }
        //Cadastro/Atualização de usuario
        if(action.equals("cadastrarUsuario")){
            Criptografia crip = new Criptografia();
            Usuario usuario = new Usuario();
            UsuarioNegocio negocio = new UsuarioNegocio();
            //cria um formatter pra transformar de string pra date
            DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
            String tipo = request.getParameter("tpUsuario");
            String id = request.getParameter("id");
            
            String dataform = request.getParameter("dtNasc");
            Date data = (Date) formatter.parse(dataform);
            
            
            if(tipo.equals("adm")){
                tipo = "1";
            }else{
                tipo = "0";
            }          
            
            usuario.setNome(request.getParameter("nome"));
            usuario.setLogin(request.getParameter("login"));
            //usuario.setSenha(crip.criptografa(request.getParameter("senha")));
            usuario.setTipo(Integer.parseInt(tipo));
            usuario.setTelefone(request.getParameter("telefone"));
            usuario.setCelular(request.getParameter("celular"));
            usuario.setEmail(request.getParameter("email"));
            usuario.setEndereco(request.getParameter("endereco"));
            //tranforma e já da set no usuario
            usuario.setDataNasc(data);  
            
            if(id.equals("")){
                usuario.setSenha(crip.criptografa(request.getParameter("senha")));
                List<Object> listaValida = negocio.validaDados(usuario);
                boolean valida = (Boolean) listaValida.get(0);
                if(valida){
                    negocio.salvar(usuario);
                    request.setAttribute("msg", "Usuario inserido com sucesso!");
                }else{
                    request.setAttribute("msg", listaValida.get(1));
                }
            }else{
                usuario.setId(Integer.parseInt(id));
                negocio.alterar(usuario);
                request.setAttribute("msg","Usuario alterado com sucesso!");
            }      
            
            List<Usuario> listaUsuario = negocio.listar();
            request.setAttribute("listaUsuario", listaUsuario);
            RequestDispatcher rd = getServletContext().getRequestDispatcher("/cadastro_usuario.jsp");
            rd.forward(request, response);
        }
        //Editar usuario
        if(action.equals("editarUsuario")){
            int id = Integer.parseInt(request.getParameter("id"));
            Usuario usu;
            
            UsuarioDAO usuDAO = new UsuarioDAO();
            usu = usuDAO.buscarPorCodigo(id);
            request.setAttribute("usuarioAlt", usu);
            
            List<Usuario> listaUsuario = usuDAO.listar();
            request.setAttribute("listaUsuario", listaUsuario);
            
            RequestDispatcher rd = getServletContext().getRequestDispatcher("/cadastro_usuario.jsp");
            rd.forward(request, response);         
        }
        //Excluir Usuario
        if(action.equals("excluirUsuario")){
            UsuarioNegocio negocio = new UsuarioNegocio();
            int id = Integer.parseInt(request.getParameter("id"));
            if(negocio.consulta(id)){
                negocio.deletar(id);
                request.setAttribute("msg", "Usuário excluído com sucesso!");
            }else{
                request.setAttribute("msg", "Impossível deletar o usuario pois existe consulta marcada com o mesmo. Exclua as consultas antes de excluir o usuário!");
            }
            List<Usuario> listaUsuario = negocio.listar();
            request.setAttribute("listaUsuario", listaUsuario);
            
            RequestDispatcher rd = getServletContext().getRequestDispatcher("/cadastro_usuario.jsp");
            rd.forward(request, response);    
        }
        //Alterar Senha
        if(action.equals("alterarSenha")){
            int idUsu = Integer.parseInt(request.getParameter("idUsu"));
            
            String senhaAntiga = request.getParameter("senhaAntiga");
            String senha = request.getParameter("senha");
            String confirmacao = request.getParameter("senhaConfirma");
            
            RequestDispatcher rd = getServletContext().getRequestDispatcher("/cadastro_usuario.jsp");
            
            boolean sucesso = false;
            UsuarioDAO usuDAO = new UsuarioDAO();
            Criptografia crip = new Criptografia();
            
            List<Usuario> listaUsuario = usuDAO.listar();
            request.setAttribute("listaUsuario", listaUsuario);
            if(senha.equals(confirmacao)){
                String senhaAntigaC = crip.criptografa(senhaAntiga);
                String senhaC = crip.criptografa(senha);
                
                sucesso = usuDAO.alterarSenha(idUsu, senhaAntigaC ,senhaC);
            }else{
                request.setAttribute("msg", "A senha e a confirmação de senha devem ser iguais!");
                rd.forward(request, response);
            }
            
            if(sucesso){
                request.setAttribute("msg", "Senha alterada com sucesso!");
            }else{
                request.setAttribute("msg", "Houve um problema, ao alterar a senha! Tente novamente.");
            }
            rd.forward(request, response);
        }
        
        //Combos Agenda
        if(action.equals("CombosAgenda")){
            TipoConsultaNegocio negociotc = new TipoConsultaNegocio();
            List<TipoConsulta> listatc = negociotc.listar();
            request.setAttribute("listaTpConsulta", listatc);
            
            ClienteNegocio negocioc = new ClienteNegocio();
            List<Cliente> listac = negocioc.listarCliente();
            
            HorarioNegocio negocioh = new HorarioNegocio();
            List<Horario> listah = negocioh.listarHorario();
                 
            request.setAttribute("listaTpConsulta", listatc);        
            request.setAttribute("listaCliente", listac);
            request.setAttribute("listaHorario", listah);
            
            RequestDispatcher rd = getServletContext().getRequestDispatcher("/agendar.jsp");
            rd.forward(request, response);
        }
        
         //Cadastrar Consulta
         if(action.equals("CadastrarConsulta")){
            String id = request.getParameter("id");
            String data = request.getParameter("data");
            int horario = Integer.parseInt(request.getParameter("horario"));
            int cliente = Integer.parseInt(request.getParameter("cliente"));
            int tpCons = Integer.parseInt(request.getParameter("tipoConsulta"));
            String obs = request.getParameter("obs");

            DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
            Date dataCons = (Date)formatter.parse(data);

            Horario horarioC = new Horario(horario);
            Cliente clienteC = new Cliente(cliente);
            TipoConsulta tpConsC = new TipoConsulta(tpCons);

            ConsultaNegocio negocio = new ConsultaNegocio();
            Consulta consulta = new Consulta(dataCons, obs, clienteC, tpConsC, horarioC);

            HttpSession session = request.getSession();
            int idUsu = (Integer) session.getAttribute("idUsuario");

            TipoConsultaNegocio negociotc = new TipoConsultaNegocio();
            List<TipoConsulta> listatc = negociotc.listar();

            ClienteNegocio negocioc = new ClienteNegocio();
            List<Cliente> listac = negocioc.listarCliente();

            HorarioNegocio negocioh = new HorarioNegocio();
            List<Horario> listah = negocioh.listarHorario();

            request.setAttribute("listaTpConsulta", listatc);        
            request.setAttribute("listaCliente", listac);
            request.setAttribute("listaHorario", listah);

            if(id.equals("")){
                List<Object> listaValida = negocio.ValidaDados(consulta, idUsu);
                boolean valida = (Boolean)listaValida.get(0);
                if(!valida){
                    request.setAttribute("msg", listaValida.get(1));
                }else{
                    try {
                        negocio.Salvar(consulta, idUsu);
                        request.setAttribute("msg", "Consulta inserida com sucesso!");
                    } catch (Exception e) {
                        request.setAttribute("msg", "Ocorreu algum erro no sistema, se o erro persistir entre em contato com o administrador!");                    
                    }                
                }
            }else{
                try{
                    consulta.setIdConsulta(Integer.parseInt(id));
                    negocio.alterar(consulta);
                    request.setAttribute("msg", "Consulta alterada com sucesso!");
                }catch (Exception c){
                    request.setAttribute("msg", "Ocorreu algum erro no sistema, se o erro persistir entre em contato com o administrador!");                    
                }
            }
            RequestDispatcher rd = getServletContext().getRequestDispatcher("/agendar.jsp");
            rd.forward(request, response);
        }
         
       //Editar consulta
        if(action.equals("editarConsulta")){
            int idCons = Integer.parseInt(request.getParameter("idCons"));
           
            Consulta cons = new Consulta();            
            ConsultaDAO consDAO = new ConsultaDAO();
            cons = consDAO.buscarPorCodigo(idCons);
            request.setAttribute("consultaAlt", cons);
            
            //COMBOS
            TipoConsultaNegocio negociotc = new TipoConsultaNegocio();
            List<TipoConsulta> listatc = negociotc.listar();
            
            ClienteNegocio negocioc = new ClienteNegocio();
            List<Cliente> listac = negocioc.listarCliente();
            
            HorarioNegocio negocioh = new HorarioNegocio();
            List<Horario> listah = negocioh.listarHorario();
                 
            request.setAttribute("listaTpConsulta", listatc);        
            request.setAttribute("listaCliente", listac);
            request.setAttribute("listaHorario", listah);
            //FIM COMBOS
            
            RequestDispatcher rd = getServletContext().getRequestDispatcher("/agendar.jsp");
            rd.forward(request, response);         
        }      
         
        //Excluir Consulta
        if(action.equals("ExcluirConsulta")){
            int id = Integer.parseInt(request.getParameter("id"));
            ConsultaNegocio negocio = new ConsultaNegocio();
            negocio.excluir(id);
            request.setAttribute("msg", "Consulta excluída com sucesso!");
            TipoConsultaNegocio negociotc = new TipoConsultaNegocio();
            List<TipoConsulta> listatc = negociotc.listar();

            ClienteNegocio negocioc = new ClienteNegocio();
            List<Cliente> listac = negocioc.listarCliente();

            HorarioNegocio negocioh = new HorarioNegocio();
            List<Horario> listah = negocioh.listarHorario();

            request.setAttribute("listaTpConsulta", listatc);        
            request.setAttribute("listaCliente", listac);
            request.setAttribute("listaHorario", listah);
            RequestDispatcher rd = getServletContext().getRequestDispatcher("/agendar.jsp");
            rd.forward(request, response);  
        }
        
    //RELATÓRIO
    if(action.equals("gerarRelatorio")){
        //cria uma conexão
        Connection con = ConnectionFactory.getConnection();
        //caminho do arquivo .jasper
        String jasper = request.getContextPath() + "/report1.jasper";
        //URL do Host em que a servlet esta executando
        String host = "http://" + request.getServerName() + ":" + request.getServerPort();
        //URL do Relatório
        URL jasperURL = new URL(host + jasper);
        //Parâmetros
        HashMap params = new HashMap();
        
        byte[] bytes = JasperRunManager.runReportToPdf(jasperURL.openStream(), params, con);
        try{
            if(bytes != null){
                // seta a pagina para ser mostrada em pdf
                response.setContentType("application/pdf");
                //envia o pdf para o cliente
                OutputStream ops = null;
                ops = response.getOutputStream();
                ops.write(bytes);
            }
        }catch(Exception e){
            request.setAttribute("msg", "Erro no Relatório!");                    
            RequestDispatcher rd = getServletContext().getRequestDispatcher("/agendar.jsp");
            rd.forward(request, response);
        }finally{
            if(con!=null){
                try{
                    con.close();
                }catch(Exception e){
                    request.setAttribute("msg", "Erro Fechando a conexão!");                    
                    RequestDispatcher rd = getServletContext().getRequestDispatcher("/agendar.jsp");
                    rd.forward(request, response);
                }
            }
        }
    }
    
    if(action.equals("logout")){
        HttpSession session = request.getSession();
        session.invalidate();
        RequestDispatcher rd = getServletContext().getRequestDispatcher("/index.jsp");
        rd.forward(request, response);    
    }
    
    if(action.equals("gerarHistoricoCliente")){
        int id = Integer.parseInt(request.getParameter("idHist"));
        //cria uma conexão
        Connection con = ConnectionFactory.getConnection();
        //caminho do arquivo .jasper
        String jasper = request.getContextPath() + "/relatorio_historico_cliente.jasper";
        //URL do Host em que a servlet esta executando
        String host = "http://" + request.getServerName() + ":" + request.getServerPort();
        //URL do Relatório
        URL jasperURL = new URL(host + jasper);
        //Parâmetros
        HashMap params = new HashMap();
        params.put("idCliente", id);
        byte[] bytes = JasperRunManager.runReportToPdf(jasperURL.openStream(), params, con);
        try{
            if(bytes != null){
                // seta a pagina para ser mostrada em pdf
                response.setContentType("application/pdf");
                //envia o pdf para o cliente
                OutputStream ops = null;
                ops = response.getOutputStream();
                ops.write(bytes);
            }
        }catch(Exception e){
            request.setAttribute("msg", "Erro no Relatório!");                    
            RequestDispatcher rd = getServletContext().getRequestDispatcher("/agendar.jsp");
            rd.forward(request, response);
        }finally{
            if(con!=null){
                try{
                    con.close();
                }catch(Exception e){
                    request.setAttribute("msg", "Erro Fechando a conexão!");                    
                    RequestDispatcher rd = getServletContext().getRequestDispatcher("/agendar.jsp");
                    rd.forward(request, response);
                }
            }
        }
    }    
    
    }    
        
    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            processRequest(request, response);
        } catch (Exception ex) {
            Logger.getLogger(Controladora.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            processRequest(request, response);
        } catch (Exception ex) {
            Logger.getLogger(Controladora.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}